package com.seer.sdk.rbk.demo;

import cn.hutool.core.io.FileUtil;
import lombok.SneakyThrows;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

import org.json.JSONObject;

import com.hrg.seer.sdk.rbk.RbkClient;
import com.hrg.seer.sdk.rbk.RbkResult;
import com.hrg.seer.sdk.rbk.RbkResultKind;

public class RbkClientDemo {

    @SneakyThrows
    public static void main(String[] args) {
        // 第一步: 建立与机器人连接的客户端
        RbkClient rbkClient = new RbkClient("192.168.1.51");
        try {
            // String filePath = "json/go.json";
            // String filePath = "json/back.json";
            // 第二步：发送请求到机器人
            // String reqStr = FileUtil.readUtf8String(filePath); // 请求参数时 json 字符串
            RbkResult result = rbkClient.request(3066, FileUtil.readUtf8String("json/go.json"), 10000);
            RbkResult result1 = rbkClient.request(3066, FileUtil.readUtf8String("json/go1.json"), 10000);
            RbkResult result2 = rbkClient.request(3066, FileUtil.readUtf8String("json/go2.json"), 10000);
            if (RbkResultKind.Ok.equals(result.getKind())) {  // sdk 请求机器人成功
                String resStr = result.getResStr();         // 获取机器人返回的信息
                JSONObject resJson = new JSONObject(resStr);
                if (resJson.getInt("ret_code") == 0) {    // 机器人返回成功
                    System.out.println("go机器人返回成功");
                } else {                                     // 机器人返回失败的原因
                    String robotErrMsg = resJson.getString("err_msg");
                    System.out.println(robotErrMsg);
                }
                
            } else {                                          // sdk 请求请求机器人失败原因
                String sdkErrMsg = result.getErrMsg();
                System.out.println(sdkErrMsg);
            }
            
            if (RbkResultKind.Ok.equals(result1.getKind())) {  // sdk 请求机器人成功
                String resStr = result1.getResStr();         // 获取机器人返回的信息
                JSONObject resJson = new JSONObject(resStr);
                if (resJson.getInt("ret_code") == 0) {    // 机器人返回成功
                    System.out.println("go1机器人返回成功");
                } else {                                     // 机器人返回失败的原因
                    String robotErrMsg = resJson.getString("err_msg");
                    System.out.println(robotErrMsg);
                }
                
            } else {                                          // sdk 请求请求机器人失败原因
                String sdkErrMsg = result1.getErrMsg();
                System.out.println(sdkErrMsg);
            }
            
            if (RbkResultKind.Ok.equals(result2.getKind())) {  // sdk 请求机器人成功
                String resStr = result2.getResStr();         // 获取机器人返回的信息
                JSONObject resJson = new JSONObject(resStr);
                if (resJson.getInt("ret_code") == 0) {    // 机器人返回成功
                    System.out.println("go2机器人返回成功");
                } else {                                     // 机器人返回失败的原因
                    String robotErrMsg = resJson.getString("err_msg");
                    System.out.println(robotErrMsg);
                }
                
            } else {                               // sdk 请求请求机器人失败原因
                String sdkErrMsg = result2.getErrMsg();
                System.out.println(sdkErrMsg);
            }
            
            String taskPath = "json/task.json";
            String navPath = "json/nav.json";
            // String filePath = "json/back.json";
            // 第二步：发送请求到机器人
            String reqTask = FileUtil.readUtf8String(taskPath);
            String reqNav = FileUtil.readUtf8String(navPath);
        
            // 创建一个单线程的定时任务执行器
            ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
            executorService.scheduleAtFixedRate(() -> {
                RbkResult taskResult = rbkClient.request(1110, reqTask, 10000);
                if (RbkResultKind.Ok.equals(taskResult.getKind())) {  // sdk 请求机器人成功
                    String resStr = taskResult.getResStr();         // 获取机器人返回的信息
                    System.out.println("task+++" + resStr);
                    
                } else {                                          // sdk 请求请求机器人失败原因
                    String sdkErrMsg = result.getErrMsg();
                    System.out.println("task+++" +sdkErrMsg);
                }
                
                RbkResult navResult = rbkClient.request(1020, reqNav, 10000);
                if (RbkResultKind.Ok.equals(navResult.getKind())) {  // sdk 请求机器人成功
                    String resStr = navResult.getResStr();         // 获取机器人返回的信息
                    System.out.println("nav+++" + resStr);
                    
                } else {                                          // sdk 请求请求机器人失败原因
                    String sdkErrMsg = result.getErrMsg();
                    System.out.println("nav+++" +sdkErrMsg);
                }
            
            }, 0, 1, TimeUnit.SECONDS);
            
            // 主线程休眠一段时间，避免程序过早退出
            TimeUnit.SECONDS.sleep(20);
            
            // 关闭定时任务执行器
            executorService.shutdownNow();
            
        } finally {
            // 第三步：客户端不在使用时，释放客户端连接
            rbkClient.dispose();//释放连接资源
        }
    }
    
}
